package com.knowledge.plus.java8.方法引用;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 我们可以通过 `::` 关键字来访问类的构造方法，对象方法，静态方法。
 *
 * @author TPF
 * @since 2024/7/11
 */
public class MethodReferenceExample {

    public static void main(String[] args) {
        /*
         * 引用对象的实例方法
         */
        List<Person> people1 = Arrays.asList(
                new Person("Alice"),
                new Person("Bob")
        );
        people1.forEach(Person::sayHello);  // 引用对象的实例方法

        /*
         * 引用静态方法
         */
        List<Person> people2 = Arrays.asList(
                new Person("Alice"),
                new Person("Bob")
        );
        Collections.sort(people2, Person::compareByName);   // 引用静态方法

        /*
         * 引用构造器
         */
        List<String> names1 = Arrays.asList("Alice", "Bob");
        List<Person> people3 = names1.stream()
                .map(Person::new)   // 引用构造器
                .collect(Collectors.toList());

        /*
         * 引用特定类型的实例方法
         */
        List<Person> people4 = Arrays.asList(
                new Person("Alice"),
                new Person("Bob")
        );
        List<String> name2 = people4.stream()
                .map(Person::getName)   // 引用特定类型的实例方法
                .collect(Collectors.toList());

    }

}
